//
//  Singleton.m
//  DesignModel
//
//  Created by 赵明明 on 2022/1/5.
//

#import "Singleton.h"


static Singleton * singleton=nil;
static dispatch_once_t pred;
@implementation Singleton
+(Singleton * )getInstance{
    dispatch_once(&pred,^{
        singleton =[[super allocWithZone:NULL ] init];
        singleton.mInt=99;
    });
    return singleton;
}
// 学习自：https://blog.csdn.net/michaelkiven/article/details/50342469
//  重写这两个函数，实现[[Singleton alloc] init]还是调用getInstance函数来获取类的对象，避免调用默认的方法获取类的对象
// 如果调用默认的方法来获取类的对象，此类的对象就不是一个了，就不能称为单例模式了
+ (id)allocWithZone:(NSZone *)zone {
    return [self getInstance];
}

- (id)copyWithZone:(NSZone *)zone {
    return self;
}
- (instancetype)init {
    if (singleton ) {
        return singleton;
    }
    if (self = [super init]) {
        //todo init other
    }
    return self;
}
@end
